/**
 * 权限管理工具
 * 用于管理用户登录状态和权限控制
 */

// 判断用户是否已登录
export const isLoggedIn = () => {
    const userInfo = uni.getStorageSync('userInfo');
    return !!userInfo;
};

// 获取当前登录用户信息
export const getUserInfo = () => {
    return uni.getStorageSync('userInfo') || null;
};

// 设置用户信息
export const setUserInfo = (userInfo) => {
    if (userInfo) {
        uni.setStorageSync('userInfo', userInfo);
    }
};

// 清除用户信息（登出）
export const logout = () => {
    uni.removeStorageSync('userInfo');
};

// 检查登录状态，未登录则跳转到登录页
export const checkLogin = (options = {}) => {
    const defaultOptions = {
        redirect: true,           // 是否自动跳转到登录页
        showToast: true,          // 是否显示提示
        toastMessage: '请先登录后再操作',  // 提示内容
        success: null,            // 已登录回调
        fail: null                // 未登录回调
    };

    const mergedOptions = { ...defaultOptions, ...options };

    if (!isLoggedIn()) {
        if (mergedOptions.showToast) {
            uni.showToast({
                title: mergedOptions.toastMessage,
                icon: 'none'
            });
        }

        if (mergedOptions.redirect) {
            setTimeout(() => {
                uni.navigateTo({
                    url: '/pages/login/index'
                });
            }, 1500);
        }

        if (typeof mergedOptions.fail === 'function') {
            mergedOptions.fail();
        }

        return false;
    }

    if (typeof mergedOptions.success === 'function') {
        mergedOptions.success(getUserInfo());
    }

    return true;
};

// 权限守卫，用于包装需要登录权限的方法
export const authGuard = (fn) => {
    return function (...args) {
        if (checkLogin({ redirect: true })) {
            return fn.apply(this, args);
        }
        return false;
    };
};

// 获取用户授权信息
export const getSetting = () => {
    return new Promise((resolve, reject) => {
        uni.getSetting({
            success(res) {
                resolve(res.authSetting);
            },
            fail(err) {
                reject(err);
            }
        });
    });
};

// 检查是否有指定权限
export const checkPermission = (scope) => {
    return new Promise((resolve) => {
        getSetting().then(authSetting => {
            resolve(!!authSetting[scope]);
        }).catch(() => {
            resolve(false);
        });
    });
};

// 请求用户授权
export const requestPermission = (scope) => {
    return new Promise((resolve, reject) => {
        uni.authorize({
            scope: scope,
            success() {
                resolve(true);
            },
            fail(err) {
                reject(err);
            }
        });
    });
}; 